﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EntitiesLayer
{
    public class Rol : IEntity
    {
        #region Atributos
        
        int _id;
        String _nombre;
        String _descripcion;
        private List<int> _listaPermisos;

        #endregion Atributos

        #region propiedades

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public String Nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }
        public String Descripcion
        {
            get { return _descripcion; }
            set { _descripcion = value; }
        }
        public List<int> ListaPermisos
        {
            get { return _listaPermisos; }
            set { _listaPermisos = value; }
        }


        #endregion propiedades

        #region constructores

        public Rol(String pnombre, String pdescripcion, List<int> plistaPermisos)
        {
            Id = 0;
            Nombre = pnombre;
            Descripcion = pdescripcion;
            ListaPermisos = plistaPermisos;
        }

        public Rol(int pid,String pnombre, String pdescripcion,List<int> plistaPermisos )
        {
            Id = pid;
            Nombre = pnombre;
            Descripcion = pdescripcion;
            ListaPermisos = plistaPermisos;
        }

        public Rol()
        {
            Id = 0;       
        }

        #endregion constructores

        #region Reglas de objeto

        public bool IsValid
        {
            get { return (GetRuleViolations().Count() == 0); }
        }

        public IEnumerable<RuleViolation> GetRuleViolations()
        {
            if (String.IsNullOrEmpty(Nombre))
            {
                yield return new RuleViolation("Nombre Requerido", "Nombre");
            }
            else if (String.IsNullOrEmpty(Descripcion))
            {
                yield return new RuleViolation("Descripción Requerida", "Descripción");
            }

            else if (ListaPermisos.Count < 0)
            {
                yield return new RuleViolation("Debe haber almenos un permiso", "Falta permiso");
            }

            yield break;
        }
        #endregion
    }
}
